/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	BOrganization.java
 * 模块说明：	
 * 修改历史：
 * 2006-4-28 - lxm - 创建。
 */
package com.hd123.rumba.organization.biz;

import java.util.ArrayList;
import java.util.List;

import com.hd123.rumba.domain.biz.SDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.gwt.base.client.exception.ClientBizException;
import com.hd123.rumba.organization.IOrgRole;
import com.hd123.rumba.organization.IOrganization;
import com.hd123.rumba.runtime.IPersistent;
import com.hd123.rumba.runtime.biz.BBaseEntity;

/**
 * 组织 | 业务层.维护 | 实体
 * 
 * @author lxm
 * 
 */
public class BOrganization extends BBaseEntity {

  /**
   * 属性：代码<br>
   * BK，not null。
   */
  private String code;

  /** 属性：名称 */
  private String name;

  /**
   * 组织域<br>
   * 该组织对应的域。
   */
  private SDomain organizationDomain = null;

  /**
   * 上级组织<br>
   * 顶级组织为空。
   */
  private SOrganization upperOrganization = null;

  /**
   * 层级码<br>
   * 自动生成，无需修改。用法类似于<code>Category.code</code><code>upperOrganization</code>的冗余，格式：4444。
   */
  private String levelId;

  /** 说明 */
  private String remark;

  /**
   * 组织角色列表<br>
   * 包含所有状态的组织角色。
   */
  private List<BOrgRole> orgRoles = new ArrayList();

  /**
   * 克隆一个简单组织对象。
   * 
   * @return
   */
  public SOrganization cloneSimple() throws BusinessException {
    SOrganization s = new SOrganization();
    s.setUuid(this.uuid);
    s.setCode(this.code);
    s.setName(this.name);
    return s;
  }

  /**
   * 从持久化对象赋值。
   * 
   * @param source
   * @throws BusinessException
   */
  public void readFrom(IPersistent source) throws BusinessException {
    super.readFrom(source);
    if (source instanceof IOrganization) {
      this.code = ((IOrganization) source).getCode();
      this.name = ((IOrganization) source).getName();
      this.organizationDomain = (SDomain) this.readObject(((IOrganization) source)
          .getOrganizationDomain(), SDomain.class);
      this.upperOrganization = (SOrganization) this.readObject(((IOrganization) source)
          .getUpperOrganization(), SOrganization.class);
      this.levelId = ((IOrganization) source).getLevelId();
      this.remark = ((IOrganization) source).getRemark();

      this.orgRoles.clear();
      for (int i = 0; i < ((IOrganization) source).getOrgRoles().size(); i++) {
        IOrgRole role = (IOrgRole) ((IOrganization) source).getOrgRoles().get(i);
        BOrgRole brole = new BOrgRole();
        brole.readFrom(role);
        this.orgRoles.add(brole);
      }
    }
  }

  public String getCodeName() {
    return code + "[" + name + "]";
  }

  public String getNameCode() {
    return name + "[" + code + "]";
  }

  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  public String getLevelId() {
    return levelId;
  }

  public void setLevelId(String levelId) {
    this.levelId = levelId;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public SDomain getOrganizationDomain() {
    return organizationDomain;
  }

  public void setOrganizationDomain(SDomain organizationDomain) {
    this.organizationDomain = organizationDomain;
  }

  public List<BOrgRole> getOrgRoles() {
    return orgRoles;
  }

  public void setOrgRoles(List<BOrgRole> orgRoles) {
    this.orgRoles = orgRoles;
  }

  public String getRemark() {
    return remark;
  }

  public void setRemark(String remark) {
    this.remark = remark;
  }

  public SOrganization getUpperOrganization() {
    return upperOrganization;
  }

  public void setUpperOrganization(SOrganization upperOrganization) {
    this.upperOrganization = upperOrganization;
  }

}
